﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using hou_elearning.Entity;
using hou_elearning.Business;
using hou_elearning.Custom;

public partial class Admin_control_ucSlide : System.Web.UI.UserControl
{
    private List<SlideEntity> glbLstGrvDatasource = null;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            napDdlBaihoc();
            napGrvSlide(true);
        }
    }
    /// <summary>
    /// Nạp GridView slide
    /// </summary>
    /// <author>liemqv</author>
    /// <create>30/04/2012</create>
    /// <param name="bLoadFromDB">Cho biết có cập nhật lại danh sách từ Database hay không</param>
    /// 
    public void napGrvSlide(bool bLoadFromDB)
    {
        if (bLoadFromDB == true || Cache["cacheLstGrvDatasource"] == null)
        {
            glbLstGrvDatasource = SlideBRL.GetAll();
            Cache["cacheLstGrvDatasource"] = glbLstGrvDatasource;
        }
        glbLstGrvDatasource = (List<SlideEntity>)Cache["cacheLstGrvDatasource"];
        if (glbLstGrvDatasource.Count <= 0)
        {
            divThongbao.InnerHtml = "<p class='info' id='warning'><span class='info_inner'>Không có bản ghi nào để hiển thị!</span></p>";
        }
        List<SlideEntity> lstSlideNgoaibaihoc = null;
        List<SlideEntity> lstSlideTheoBaihoc = null;
        if(Session["PK_iBaihocID"] == null)
        {
            Session["PK_iBaihocID"] = ddlBaihoc.SelectedValue;
        }
        Int64 PK_iBaihocID = Int64.Parse(Session["PK_iBaihocID"].ToString());
        ddlBaihoc.Items.FindByValue(PK_iBaihocID.ToString()).Selected = true;
        //BaihocEntity oBaihoc = BaihocBRL.GetOne(PK_iBaihocID);
        List<Baihoc_SlideEntity> lstBaihoc_slide = Baihoc_SlideBRL.GetByFK_iBaihocID(PK_iBaihocID);

        if (lstBaihoc_slide.Count > 0)
        {
            lstSlideTheoBaihoc = new List<SlideEntity>();
            lstSlideNgoaibaihoc = new List<SlideEntity>();
            lstSlideNgoaibaihoc.AddRange(glbLstGrvDatasource); //Copy element từ glbLstGrvDatasource vào lstSlideNgoaibaihoc
            for (int i = 0; i < lstBaihoc_slide.Count; ++i)
            {
                SlideEntity oSlideFound = glbLstGrvDatasource.Find
                (
                    delegate(SlideEntity oSlideByID)
                    {
                        return oSlideByID.PK_iSlideID == lstBaihoc_slide[i].FK_iSlideID;
                    }
                );
                lstSlideTheoBaihoc.Add(oSlideFound);
                lstSlideNgoaibaihoc.Remove(oSlideFound);
            }
            lstBaihoc_slide.Clear(); //Giải phóng
            /* Kiểm tra người dùng đang chọn chỉ hiển thị slide của họ hay hiển thị tất cả */
            Boolean bOnlyMy = true;
            if(Session["OnlyMy"] == null)
            {
                Session["OnlyMy"] = true;
            }
            else
            {
                bOnlyMy = Boolean.Parse(Session["OnlyMy"].ToString());
            }
            if(bOnlyMy == true)
            {
                Int64 PK_iNguoidungID = iGetUserLogin();
                lstSlideNgoaibaihoc = lstSlideNgoaibaihoc.FindAll(
                delegate(SlideEntity oSlide)
                {
                    return oSlide.FK_iNguoitaoID == iGetUserLogin();
                });
            }
            if(lstSlideNgoaibaihoc.Count <= 0)
            {
                divThongbaoNgoaidanhsach.InnerHtml = "<p class='info' id='warning'><span class='info_inner'>Không có bản ghi nào để hiển thị</span></p>";
            }
            else
            {
                grvSlide.DataSource = lstSlideNgoaibaihoc;
                grvSlide.DataKeyNames = new string[] { "PK_iSlideID" };
                grvSlide.DataBind();
            }
            if (lstSlideTheoBaihoc.Count <= 0)
            {
                divThongbao.InnerHtml = "<p class='info' id='warning'><span class='info_inner'>Không có bản ghi nào để hiển thị</span></p>";
            }
            else
            {
                grvSlideTheobaihoc.DataSource = lstSlideTheoBaihoc;
                grvSlideTheobaihoc.DataKeyNames = new string[] { "PK_iSlideID" };
                grvSlideTheobaihoc.DataBind();
            }
        }
        else
        {
            grvSlideTheobaihoc.DataSource = null;
            grvSlideTheobaihoc.DataBind();
            grvSlide.DataSource = glbLstGrvDatasource;
            grvSlide.DataKeyNames = new string[] { "PK_iSlideID" };
            grvSlide.DataBind();
        }
    }

    /// <summary>
    /// Nạp ddlBaihoc
    /// </summary>
    /// <author>liemqv</author>
    /// <create>01/05/2012</create>
    ///
    public void napDdlBaihoc()
    {
        List<BaihocEntity> lstBaihoc = BaihocBRL.GetAll();
        ddlBaihoc.DataSource = lstBaihoc;
        ddlBaihoc.DataTextField = "sTenbaihoc";
        ddlBaihoc.DataValueField = "PK_iBaihocID";
        ddlBaihoc.DataBind();
    }
    /*
     * Hàm reset để xóa trắng form nhâp thông tin
     */
    public void resetForm()
    {
        txtTenslide.Text = "";
        txtGhichu.Text = "";
        divThongbao.InnerHtml = "";
    }
    /// <summary>
    /// Lấy ID người dùng đăng nhập
    /// </summary>
    /// <author>liemqv</author>
    /// <create>25/04/2012</create>
    /// 
    public Int64 iGetUserLogin()
    {
        Int64 PK_iNguoidungID = 0;
        try
        {
            if (Session["UserID"] != null)
            {
                PK_iNguoidungID = Int64.Parse(Session["UserID"].ToString());
            }
        }
        catch (Exception ex)
        {
            PK_iNguoidungID = 0;
        }
        return PK_iNguoidungID;
    }
    /*
     * Hàm nạp dữ liệu cho form theo ID truyền vào
     * Tham số: truyền vào ID
     * Thực hiện: Lấy thông tin đối tượng theo ID và nạp vào form
     */
    public void napForm(Int64 iPK_ID)
    {
        SlideEntity oSlide = SlideBRL.GetOne(iPK_ID);
        if (oSlide != null)
        {
            txtTenslide.Text = oSlide.sTenslide;
            txtGhichu.Text = oSlide.sGhichu;
            txtVideoUrl.Text = oSlide.sVideo;
            divThongbao.InnerHtml = "";
        }
    }
    protected void grvSlide_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grvSlide.PageIndex = e.NewPageIndex;
        napGrvSlide(false);
    }
    /// <summary>
    /// Hàm kiểm tra RowCommand
    /// </summary>
    /// <param name="grv">Cho biết áp dụng cho GridView nào</param>
    /// <param name="e">GridViewCommandEventArgs của GridView grv</param>
    /// <author>liemqv</author>
    /// <create>01/05/2012</create>
    /// 
    public void onRowComand(GridView grv, GridViewCommandEventArgs e)
    {
        int iIndex;
        Int64 PK_iSlideID;
        iIndex = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = grv.Rows[iIndex];
        PK_iSlideID = Int64.Parse(row.Cells[1].Text);
        if (e.CommandName == "Sua")
        {
            btnOK.CommandName = "Edit";
            btnOK.Text = "<span>Sửa<span>";
            btnOK.CommandArgument = PK_iSlideID.ToString();
            btnOK.CausesValidation = false;
            panEdit.Visible = true;
            napForm(PK_iSlideID);
        }
        else
            if (e.CommandName == "Xoa")
            {
                /*
                 * Thực hiện tác vụ xóa
                 * Phải đảm bảo xóa được trong Database và xóa trong danh sách.
                 * Nhưng không phải load lại từ database để hiển thị
                 */
                SlideBRL.Remove(PK_iSlideID); //Xóa trong database
                //Tìm đối tượng slide theo ID trong danh sách lấy từ cache
                glbLstGrvDatasource = (List<SlideEntity>)Cache["cacheLstGrvDatasource"];
                SlideEntity oSlideDelete = glbLstGrvDatasource.Find
                (
                    delegate(SlideEntity oSlideByID)
                    {
                        return oSlideByID.PK_iSlideID == PK_iSlideID;
                    }
                );
                if (oSlideDelete != null)
                {
                    glbLstGrvDatasource.Remove(oSlideDelete); //Xóa trong danh sách
                }
                napGrvSlide(false);
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Xóa slide " + oSlideDelete.sTenslide + " thành công!</span></p>";
            }
        else
            if (e.CommandName == "Content")
            {
                /*
                * Chuyển sang trang biên tập slide
                */
                Session["PK_iSlideID"] = PK_iSlideID; //Tạo Session để lưu ID của slide hiện tại phục vụ cho hiển thị danh sách slide theo bài học
                Response.Redirect(ResolveUrl("~/Admin/?page=BientapSlide"));
            }
    }
    protected void grvSlide_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        onRowComand(grvSlide, e);
    }
    protected void grvSlide_Sorting(object sender, GridViewSortEventArgs e)
    {
        if (ViewState["SortDirection"] == null)
            ViewState["SortDirection"] = "ASC";
        else
        {
            ViewState["SortDirection"] = ViewState["SortDirection"].ToString() == "ASC" ? "DESC" : "ASC";
        }
        List<SlideEntity> lstShort = (List<SlideEntity>)Cache["cacheLstGrvDatasource"];
        glbLstGrvDatasource = SlideEntity.Sort(lstShort, e.SortExpression, ViewState["SortDirection"].ToString());
        napGrvSlide(false);
    }
    protected void grvSlide_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        Label lblThongtin = null;
        Label lblVideo = null;
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            lblThongtin = (Label)e.Row.FindControl("lblThongtin");
            lblVideo = (Label)e.Row.FindControl("lblVideo");
            if (lblThongtin != null)
            {
                String[] arr = lblThongtin.Text.Split('|');
                Int64 PK_iNguoitaoID = Int64.Parse(arr[0]);
                Int64 PK_iNguoicapnhatID = Int64.Parse(arr[1]);
                String strNguoitao = "";
                String strNguoicapnhat = "";
                String strdNgaytao = DateTime.Parse(arr[2]).ToString("HH:mm dd/MM/yyyy");
                String strdNgaycapnhat = DateTime.Parse(arr[3]).ToString("HH:mm - dd/MM/yyyy");
                NguoidungEntity oNguoidungTmp = NguoidungBRL.GetOne(PK_iNguoitaoID);
                if (oNguoidungTmp != null)
                {
                    strNguoitao = oNguoidungTmp.sHoten;
                }
                oNguoidungTmp = null;
                oNguoidungTmp = NguoidungBRL.GetOne(PK_iNguoicapnhatID);
                if (oNguoidungTmp != null)
                {
                    strNguoicapnhat = oNguoidungTmp.sHoten;
                }
                lblThongtin.Text = "Cập nhật bởi <b>" + strNguoicapnhat + "</b> <i>" + strdNgaycapnhat + "</i>";
            }
            if (lblVideo != null)
            {
                String strUrl = sTenvideoBySlideID(Int64.Parse(lblVideo.Text));
                int iLast = strUrl.LastIndexOf('/');
                lblVideo.Text = strUrl.Substring(iLast + 1, strUrl.Length - (iLast + 1));
            }
        }
    }
    protected void btnSearchByID_Click(object sender, EventArgs e)
    {
        string strSearch = txtSearchByID.Text;
        short iPK_ID = 0;
        List<SlideEntity> lstSearchResult = null;
        glbLstGrvDatasource = (List<SlideEntity>)Cache["cacheLstGrvDatasource"];
        if (txtID.Text.Trim().Equals(""))
        {
            iPK_ID = 0;
        }
        else
        {
            iPK_ID = Int16.Parse(txtID.Text);
        }
        /* Nếu người dùng không nhập ID thì tìm theo từ khóa */
        if (iPK_ID == 0)
        {
            lstSearchResult = glbLstGrvDatasource.FindAll(
            delegate(SlideEntity oSlide)
            {
                return oSlide.sTenslide.ToUpper().Contains
                (
                    strSearch.ToUpper()) ||
                    oSlide.sGhichu.ToUpper().Contains(strSearch.ToUpper()
                );
            });
        }
        /* Tìm theo ID */
        else
        {
            lstSearchResult = glbLstGrvDatasource.FindAll
            (
                delegate(SlideEntity oSlideByID)
                {
                    return oSlideByID.PK_iSlideID == iPK_ID;
                }
            );
        }
        /* Hiển thị thông báo */
        if (lstSearchResult.Count == 0)
        {
            napGrvSlide(false);
            divThongbao.InnerHtml = "<p class='info' id='info'><span class='info_inner'>Không tìm thấy bản ghi nào phù hợp</span></p>";
        }
        else
        {
            grvSlide.DataSource = lstSearchResult;
            grvSlide.DataBind();
            divThongbao.InnerHtml = "<p class='info' id='info'><span class='info_inner'>Tìm thấy " + lstSearchResult.Count + " bản ghi phù hợp!</span></p>";
        }
    }
    protected void btnShowAll_Click(object sender, EventArgs e)
    {
        Session["OnlyMy"] = false;
        napGrvSlide(false);
        divThongbao.InnerHtml = "";
    }
    /// <summary>
    /// Hàm thêm slide mới
    /// </summary>
    /// <author>liemqv</author>
    /// <create>01/05/2012</create>
    /// 
    public Int64 iThemSlide()
    {
        Int64 iRes = 0;

        try
        {
            /* Khởi tạo đối tượng mới và gán giá trị cho đối tượng này từ các trường trong form nhập */
            SlideEntity oSlide = new SlideEntity();
            oSlide.sTenslide = txtTenslide.Text.Trim();
            oSlide.sGhichu = txtGhichu.Text.Trim();
            oSlide.iTrangthai = 1; //Mặc định, trạng thái bình thường
            if (txtVideoUrl.Text != "Chưa chọn video...")
            {
                oSlide.sVideo = txtVideoUrl.Text;
            }
            oSlide.dThoidiemtao = DateTime.Now;
            oSlide.dThoidiemcapnhat = DateTime.Now;
            oSlide.FK_iNguoitaoID = iGetUserLogin();
            oSlide.FK_iNguoicapnhatID = iGetUserLogin();
            oSlide.FK_iAnhminhhoaID = 1;
            /* Thêm mới */
            iRes = SlideBRL.Add(oSlide);
            if (iRes > 0)
            {
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Thêm slide " + oSlide.sTenslide + " thành công!</span></p>";
                /* Nạp lại dữ liệu */
                panEdit.Visible = false;
            }
        }
        catch (Exception ex)
        {
            divThongbao.InnerHtml = "<p class='info' id='error'><span class='info_inner'>Lỗi: " + ex.Message + "</span></p>";
        }

        return iRes;
    }
    /// <summary>
    /// Lấy tên video theo ID của slide
    /// </summary>
    /// <author>liemqv</author>
    /// <create>01/05/2012</create>
    /// 
    public String sTenvideoBySlideID(long PK_iSlideID)
    {
        String sRes = "Không có video";
        if(PK_iSlideID > 0)
        {
            sRes = SlideBRL.GetOne(PK_iSlideID).sVideo;
            if(sRes == "")
            {
                sRes = "Không có video";
            }
        }
        return sRes;
    }

    /// <summary>
    /// Hàm sửa thông tin slide
    /// </summary>
    /// <author>liemqv</author>
    /// <create>01/05/2012</create>
    /// 
    public bool bSuaSlide()
    {
        bool bRes = false;

        try
        {
            /* Khởi tạo đối tượng mới và gán giá trị cho đối tượng này từ các trường trong form nhập */
            SlideEntity oSlide = new SlideEntity();
            oSlide.sTenslide = txtTenslide.Text.Trim();
            oSlide.sGhichu = txtGhichu.Text.Trim();
            oSlide.dThoidiemtao = DateTime.Now;
            oSlide.dThoidiemcapnhat = DateTime.Now;
            oSlide.FK_iNguoitaoID = iGetUserLogin();
            oSlide.FK_iNguoicapnhatID = iGetUserLogin();
            oSlide.FK_iAnhminhhoaID = 1;
            Int64 iPK_ID = Int64.Parse(btnOK.CommandArgument);
            SlideEntity oSlideOld = SlideBRL.GetOne(iPK_ID);
            oSlide.PK_iSlideID = oSlideOld.PK_iSlideID;
            oSlide.FK_iNguoitaoID = oSlideOld.FK_iNguoitaoID;
            oSlide.dThoidiemtao = oSlideOld.dThoidiemtao;
            String str = txtVideoUrl.Text;
            if (txtVideoUrl.Text != "")
            {
                oSlide.sVideo = txtVideoUrl.Text;
            }
            bRes = SlideBRL.Edit(oSlide); //Gọi tác vụ sửa
            btnOK.CausesValidation = true;
            /*  Hiển thị thông báo */
            if (bRes == true)
            {
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Sửa slide " + oSlide.sTenslide + " thành công!</span></p>";
            }
            /* Nạp lại dữ liệu */
            panEdit.Visible = false;
            napGrvSlide(true);
        }
        catch (Exception ex)
        {
            divThongbao.InnerHtml = "<p class='info' id='error'><span class='info_inner'>Lỗi: " + ex.Message + "</span></p>";
        }

        return bRes;
    }
    protected void btnOK_Click(object sender, EventArgs e)
    {
        
        if (btnOK.CommandName == "Edit")
        {
            bSuaSlide();
        }
        else
            if(btnOK.CommandName == "Add")
            {
                iThemSlide();
                napGrvSlide(true);
            }
        else
            if (btnOK.CommandName == "AddToList")
            {
                Int64 PK_iBaihocID = 0;
                Int64 PK_iSlideID = iThemSlide();
                if (Session["PK_iBaihocID"] != null)
                {
                    PK_iBaihocID = Int64.Parse(Session["PK_iBaihocID"].ToString());
                }
                if(PK_iSlideID > 0 && PK_iBaihocID > 0)
                {
                    Baihoc_SlideEntity oBaihocSlide = new Baihoc_SlideEntity();
                    oBaihocSlide.FK_iBaihocID = PK_iBaihocID;
                    oBaihocSlide.FK_iSlideID = PK_iSlideID;
                    Baihoc_SlideBRL.Add(oBaihocSlide);
                    napGrvSlide(true);
                }
            }
    }
    protected void btnCancel_Click(object sender, EventArgs e)
    {
        resetForm();
        btnOK.CommandName = "Add";
        panEdit.Visible = false;
    }
    protected void lbtnAdd_Click(object sender, EventArgs e)
    {
        btnOK.CommandName = "Add";
        btnOK.Text = "<span>Thêm</span>";
        panEdit.Visible = true;
        resetForm();
    }
    /// <summary>
    /// Hàm xóa danh sách các item đã chọn
    /// </summary>
    /// <param name="grv">Cho biết xóa trên GridView nào</param>
    /// <author>liemqv</author>
    /// <create>01/05/2012</create>
    /// 
    public void deleteAll(GridView grv)
    {
        try
        {
            glbLstGrvDatasource = (List<SlideEntity>)Cache["cacheLstGrvDatasource"];
            SlideEntity oSlideDelete = null;
            int iDeleteCount = 0; //Đếm số lượng bản ghi xóa thành công
            /* Lặp với mỗi hàng, tìm hàng đã chọn, tìm ra ID và xóa theo ID */
            foreach (GridViewRow row in grv.Rows)
            {
                CheckBox chkDelete = row.FindControl("chkDelete") as CheckBox;
                Int64 iID = Convert.ToInt64(grv.DataKeys[row.RowIndex].Values["PK_iSlideID"]);
                if ((chkDelete != null) && (chkDelete.Checked == true))
                {
                    SlideBRL.Remove(iID); //Xóa trong database
                    /* Tìm đối tượng slide theo ID trong danh sách */
                    oSlideDelete = glbLstGrvDatasource.Find
                    (
                        delegate(SlideEntity oSlideByID)
                        {
                            return oSlideByID.PK_iSlideID == iID;
                        }
                    );
                    glbLstGrvDatasource.Remove(oSlideDelete); //xóa trong list cache
                    ++iDeleteCount;
                }
            }
            napGrvSlide(false);
            if (iDeleteCount > 0)
            {
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Xóa thành công " + iDeleteCount + " bản ghi!</span></p>";
            }
        }
        catch (Exception ex)
        {
            divThongbao.InnerHtml = "<p class='info' id='error'><span class='info_inner'>Lỗi: " + ex.Message + "</span></p>";
        }
    }
    protected void lbtnDelete_Click(object sender, EventArgs e)
    {
        deleteAll(grvSlide);
    }
    protected void btnOnlyInCourse_Click(object sender, EventArgs e)
    {
        Session["bOnlyInCourse"] = true;
        napGrvSlide(false);
    }
    protected void grvSlideTheobaihoc_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grvSlide.PageIndex = e.NewPageIndex;
        napGrvSlide(false);
    }
    protected void grvSlideTheobaihoc_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        onRowComand(grvSlideTheobaihoc, e);
    }
    protected void grvSlideTheobaihoc_Sorting(object sender, GridViewSortEventArgs e)
    {
        if (ViewState["SortDirection"] == null)
            ViewState["SortDirection"] = "ASC";
        else
        {
            ViewState["SortDirection"] = ViewState["SortDirection"].ToString() == "ASC" ? "DESC" : "ASC";
        }
        List<SlideEntity> lstShort = (List<SlideEntity>)Cache["cacheLstGrvDatasource"];
        glbLstGrvDatasource = SlideEntity.Sort(lstShort, e.SortExpression, ViewState["SortDirection"].ToString());
        napGrvSlide(false);
    }
    protected void grvSlideTheobaihoc_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        Label lblThongtin = null;
        Label lblVideo = null;
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            lblThongtin = (Label)e.Row.FindControl("lblThongtin");
            lblVideo = (Label)e.Row.FindControl("lblVideo");
            if (lblThongtin != null)
            {
                String[] arr = lblThongtin.Text.Split('|');
                Int64 PK_iNguoitaoID = Int64.Parse(arr[0]);
                Int64 PK_iNguoicapnhatID = Int64.Parse(arr[1]);
                String strNguoitao = "";
                String strNguoicapnhat = "";
                String strdNgaytao = DateTime.Parse(arr[2]).ToString("HH:mm dd/MM/yyyy");
                String strdNgaycapnhat = DateTime.Parse(arr[3]).ToString("HH:mm - dd/MM/yyyy");
                NguoidungEntity oNguoidungTmp = NguoidungBRL.GetOne(PK_iNguoitaoID);
                if (oNguoidungTmp != null)
                {
                    strNguoitao = oNguoidungTmp.sHoten;
                }
                oNguoidungTmp = null;
                oNguoidungTmp = NguoidungBRL.GetOne(PK_iNguoicapnhatID);
                if (oNguoidungTmp != null)
                {
                    strNguoicapnhat = oNguoidungTmp.sHoten;
                }
                lblThongtin.Text = "Cập nhật bởi <b>" + strNguoicapnhat + "</b> <i>" + strdNgaycapnhat + "</i>";
            }
            if(lblVideo != null)
            {
                String strUrl = sTenvideoBySlideID(Int64.Parse(lblVideo.Text));
                int iLast = strUrl.LastIndexOf('/');
                lblVideo.Text = strUrl.Substring(iLast + 1, strUrl.Length - (iLast + 1));
            }
        }
    }
    protected void lbtnAddToList_Click(object sender, EventArgs e)
    {
        Int64 PK_iBaihocID = 0;
        int iAddCount = 0;
        CheckBox chkSlide = null;
        try
        {
            glbLstGrvDatasource = (List<SlideEntity>)Cache["cacheLstGrvDatasource"];
            if (Session["PK_iBaihocID"] != null)
            {
                PK_iBaihocID = Int64.Parse(Session["PK_iBaihocID"].ToString());
            }
            else
            {
                divThongbao.InnerHtml = "<p class='info' id='warning'><span class='info_inner'>Xin hãy chọn bài học cần thêm và thử lại!</span></p>";
                return;
            }
            iAddCount = 0; //Đếm số lượng bản ghi thêm thành công
            /* Lặp với mỗi hàng */
            foreach (GridViewRow row in grvSlide.Rows)
            {
                chkSlide = row.FindControl("chkDelete") as CheckBox;
                Int64 PK_iSlideID = Convert.ToInt64(grvSlide.DataKeys[row.RowIndex].Values["PK_iSlideID"]);
                if ((chkSlide != null) && (chkSlide.Checked == true))
                {
                    Baihoc_SlideEntity oBaihoc_Slide = new Baihoc_SlideEntity();
                    oBaihoc_Slide.FK_iSlideID = PK_iSlideID;
                    oBaihoc_Slide.FK_iBaihocID = PK_iBaihocID;
                    oBaihoc_Slide.iSothutu = 1; //Mặc định ban đầu só thứ tự = 1
                    Baihoc_SlideBRL.Add(oBaihoc_Slide);
                    ++iAddCount;
                }
            }
            napGrvSlide(false);
            if (iAddCount > 0)
            {
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Thêm vào danh sách " + iAddCount + " bản ghi!</span></p>";
            }
        }
        catch (Exception ex)
        {
            divThongbao.InnerHtml = "<p class='info' id='error'><span class='info_inner'>Lỗi: " + ex.Message + "</span></p>";
        }
    }
    protected void lbtnRemoveFromList_Click(object sender, EventArgs e)
    {
        Int64 PK_iBaihocID = 0;
        int iAddCount = 0;
        CheckBox chkSlide = null;
        Baihoc_SlideEntity oBaihoc_Slide = null;
        List<Baihoc_SlideEntity> lstBaihocSlide = null;
        try
        {
            glbLstGrvDatasource = (List<SlideEntity>)Cache["cacheLstGrvDatasource"];
            if (Session["PK_iBaihocID"] != null)
            {
                PK_iBaihocID = Int64.Parse(Session["PK_iBaihocID"].ToString());
            }
            else
            {
                return;
            }
            iAddCount = 0; //Đếm số lượng bản ghi thành công
            /* Lặp với mỗi hàng */
            foreach (GridViewRow row in grvSlideTheobaihoc.Rows)
            {
                chkSlide = row.FindControl("chkDelete") as CheckBox;
                Int64 PK_iSlideID = Convert.ToInt64(grvSlideTheobaihoc.DataKeys[row.RowIndex].Values["PK_iSlideID"]);
                if ((chkSlide != null) && (chkSlide.Checked == true))
                {
                    lstBaihocSlide = Baihoc_SlideBRL.GetByFK_iBaihocIDAndFK_iSlideID(PK_iBaihocID, PK_iSlideID);
                    if (lstBaihocSlide.Count > 0)
                    {
                        oBaihoc_Slide = lstBaihocSlide[0];
                        Baihoc_SlideBRL.Remove(oBaihoc_Slide.PK_iBaihoc_SlideID);
                        ++iAddCount;
                    }
                    lstBaihocSlide.Clear();
                }
            }
            napGrvSlide(false);
            if (iAddCount > 0)
            {
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Xóa " + iAddCount + " bản ghi khỏi danh sách!</span></p>";
            }
        }
        catch (Exception ex)
        {
            divThongbao.InnerHtml = "<p class='info' id='error'><span class='info_inner'>Lỗi: " + ex.Message + "</span></p>";
        }
    }
    protected void lbtnAddNewAndAddToList_Click(object sender, EventArgs e)
    {
        btnOK.CommandName = "AddToList";
        btnOK.Text = "<span>Thêm</span>";
        panEdit.Visible = true;
        resetForm();
    }
    protected void lbtnDeleteInList_Click(object sender, EventArgs e)
    {
        deleteAll(grvSlideTheobaihoc);
    }
    protected void ddlBaihoc_SelectedIndexChanged(object sender, EventArgs e)
    {
        Session["PK_iBaihocID"] = ddlBaihoc.SelectedValue;
        napGrvSlide(false);
    }
    protected void btnMyCourses_Click(object sender, EventArgs e)
    {
        Session["OnlyMy"] = true;
    }
}